#ifndef __WIZ_DATATYPE_FLOATCOMPONENTS_HPP__SHANHAOBO_19800429__
#define __WIZ_DATATYPE_FLOATCOMPONENTS_HPP__SHANHAOBO_19800429__

#include "../../Base/Type/WizBaseType.hpp"

namespace Wiz
{
#pragma pack(push, 1)
    namespace FloatComponents16
    {
        struct Type
        {
            union
            {
                struct
                {
                    ::Wiz::UInt16::Type	Mantissa    : 10;
                    ::Wiz::UInt16::Type	Exponent    : 5;
                    ::Wiz::UInt16::Type	Sign        : 1;
                };

                ::Wiz::UInt16::Type     UintEncoded;
            };
        };
    } /// end of namespace FloatComponents16

    namespace FloatComponents32
    {
        struct Type
        {
            union
            {
                struct
                {
                    ::Wiz::UInt32::Type	Mantissa    : 23;
                    ::Wiz::UInt32::Type	Exponent    : 8;
                    ::Wiz::UInt32::Type	Sign        : 1;
                };

                ::Wiz::UInt32::Type     UintEncoded;
                ::Wiz::Real32::Type     RealEncoded;
            };

            Type()
            {
                UintEncoded = 0;
            }

            Type(::Wiz::Real32::In R32)
            {
                RealEncoded = R32;
            }

            Type(::Wiz::Int::In I32)
            {
                RealEncoded = ::Wiz::Cast::Static<::Wiz::Real32::Type>(I32);
            }
        };
    } /// end of namespace FloatComponents32

    namespace FloatComponents64
    {
        struct Type
        {
            union
            {
                struct
                {
                    ::Wiz::UInt64::Type	Mantissa    : 52;
                    ::Wiz::UInt64::Type	Exponent    : 11;
                    ::Wiz::UInt64::Type	Sign        : 1;
                };

                ::Wiz::UInt64::Type     UintEncoded;
                ::Wiz::Real64::Type     RealEncoded;
            };

            Type()
            {
                UintEncoded = 0;
            }

            Type(::Wiz::Real64::In R64)
            {
                RealEncoded = R64;
            }

            Type(::Wiz::Int::In I32)
            {
                RealEncoded = ::Wiz::Cast::Static<::Wiz::Real64::Type>(I32);
            }
        };
    } /// end of namespace FloatComponents64

    namespace ZeroneComponents16
    {
        struct Type
        {
            ::Wiz::UInt16::Type         Mantissa;


            Type(::Wiz::Real32::In R32)
            {
                ::Wiz::FloatComponents32::Type Temp(R32);


            }
        };
    } /// end of namespace ZeroneComponents16

    namespace ZeroneComponents32
    {
        struct Type
        {
            ::Wiz::UInt32::Type         Mantissa;
        };
    } /// end of namespace ZeroneComponents32
#pragma pack(pop)
} /// end of namespace Wiz

#endif /*__WIZ_DATATYPE_FLOATCOMPONENTS_HPP__SHANHAOBO_19800429__*/
